package cn.qiao.dubbo.provider.demo;

import cn.qiao.dubbo.TestGenericService;
import cn.qiao.dubbo.common.User;
import cn.qiao.dubbo.provider.util.GeneralizeUtil;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * desc:
 *
 * @author qiao
 * @date 2023年07月17日 22:03
 */
public class TestGenericServiceDemo {


    public static void main(String[] args) throws NoSuchMethodException {
//
        String[] paramTypes = null;
        Object[] param = new Object[1];
        Method singleParam = TestGenericService.class.getMethod("singleParam",User.class);
        String interfaceName = "cn.qiao.dubbo.TestGenericService";
        String method = singleParam.getName();;
//        获取参数的类型
        Class<?>[] parameterTypes = singleParam.getParameterTypes();

        Parameter[] parameters = singleParam.getParameters();

        for (int i = 0; i < parameters.length; i++) {
            Class<?> type = parameters[i].getType();
            paramTypes = new String[parameterTypes.length];
            paramTypes[i] = type.getName();
        }

        User user = new User();
        param[0]  = user;

        Object send = GeneralizeUtil.send(interfaceName,method,paramTypes,param);

        System.out.println(send);

//        //构造config - 设置zk地址、interface全限定名、版本等
//        Config config = new Config();
////方法名
//        String methodName = "genericTypeParam";
////参数类型
//        String[] parameterTypes = new String[1]; //1个参数类型
//        parameterTypes[0] = "service.PageReq"; //参数类的全限定名
////参数对象
//        Object[] objectParams = new Object[1]; //1个参数值
//        JSONObject paramPage = new JSONObject(); //看作是对象转换为JSONObject的过程
//        paramPage.put("pageNum", 10);
//        paramPage.put("pageSize", 1);
//        JSONObject paramUser = new JSONObject();
//        paramUser.put("name", "nicolimine");
//        paramUser.put("gender", 1);
//        paramUser.put("class", "service.User");//注意这里，PojoUtils解析Map类型，如果存在key=class时，会直接指定该Object类型
//        paramPage.put("queryParam", paramUser);
//        objectParams[0] = paramPage;
////执行泛化调用
//        this.getGenericService(config).$invoke(methodName, parameterTypes, objectParams);


    }







}
